// IO函子：IO函子可以把不纯的动作存储到_value中，延迟执行这个不纯的操作，包装当前的操作纯
const fp = require("lodash/fp");

class IO {
  static of(value) {
    return new IO(function () {
      return value;
    });
  }

  constructor(fn) {
    this._value = fn;
  }

  map(fn) {
    return new IO(fp.flowRight(fn, this._value));
  }
}

let r = IO.of(process).map((p) => p.execPath);
console.log(r, r._value());
